﻿//using System.ComponentModel.DataAnnotations;
//using System.ComponentModel;
//using System.Reflection;

//namespace LS.Screening.Core
//{
//    public static class TypeExtensions
//    {
//        /// <summary>
//        /// 获取泛型基础类型
//        /// </summary>
//        /// <param name="type"></param>
//        /// <returns></returns>
//        public static Type GetUnderlyingType(this Type type)
//        {
//            if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
//            {
//                return Nullable.GetUnderlyingType(type);
//            }
//            return type;
//        }

//        /// <summary>
//        /// 获取显示友好名
//        /// </summary>
//        /// <param name="type"></param>
//        /// <returns></returns>
//        public static string GetDisplay(this Type type)
//        {
//            IEnumerable<Attribute> customAttributes = type.GetCustomAttributes();
//            foreach (Attribute item in customAttributes)
//            {
//                DisplayAttribute displayAttribute = item as DisplayAttribute;
//                if (displayAttribute != null)
//                {
//                    return displayAttribute.Name ?? displayAttribute.Description;
//                }
//                DescriptionAttribute descriptionAttribute = item as DescriptionAttribute;
//                if (descriptionAttribute != null)
//                {
//                    return descriptionAttribute.Description;
//                }

//                DisplayNameAttribute displayNameAttribute = item as DisplayNameAttribute;
//                if (displayNameAttribute != null)
//                {
//                    return displayNameAttribute.DisplayName;
//                }
//            }
//            return null;
//        }

//        /// <summary>
//        /// 获取显示友好名
//        /// </summary>
//        /// <param name="member"></param>
//        /// <returns></returns>
//        public static string GetDisplay(this MemberInfo member)
//        {
//            List<object> list = member.GetCustomAttributes(inherit: true).ToList();
//            if (list.Count == 0)
//            {
//                if (member.DeclaringType!.IsAssignableTo(typeof(ISoftDelete)))
//                {
//                    PropertyInfo property = typeof(ISoftDelete).GetProperty(member.Name);
//                    if (property != null)
//                    {
//                        list.AddRange(property.GetCustomAttributes().Cast<object>().ToArray());
//                    }
//                }

//                if (member.DeclaringType!.IsAssignableTo(typeof(IVersion)))
//                {
//                    PropertyInfo property = typeof(IVersion).GetProperty(member.Name);
//                    if (property != null)
//                    {
//                        list.AddRange(property.GetCustomAttributes().Cast<object>().ToArray());
//                    }
//                }

//                if (list.Count == 0 && member.DeclaringType!.GetInterface("Inaction.Interfaces.IEntity") != null && member.Name.Equals("IsDeleted", StringComparison.OrdinalIgnoreCase))
//                {
//                    return "是否删除";
//                }
//            }

//            foreach (object item in list)
//            {
//                DisplayAttribute displayAttribute = item as DisplayAttribute;
//                if (displayAttribute != null)
//                {
//                    return displayAttribute.Name ?? displayAttribute.Description;
//                }

//                DescriptionAttribute descriptionAttribute = item as DescriptionAttribute;
//                if (descriptionAttribute != null)
//                {
//                    return descriptionAttribute.Description;
//                }

//                DisplayNameAttribute displayNameAttribute = item as DisplayNameAttribute;
//                if (displayNameAttribute != null)
//                {
//                    return displayNameAttribute.DisplayName;
//                }
//            }

//            return null;
//        }

//        /// <summary>
//        /// 获取类型描述信息
//        /// </summary>
//        /// <param name="type"></param>
//        /// <returns></returns>
//        public static ClassDescribe GetDescribe(this Type type)
//        {
//            return ClassDescribe.Get(type);
//        }

//        /// <summary>
//        /// 获取类型描述信息
//        /// </summary>
//        /// <typeparam name="T"></typeparam>
//        /// <returns></returns>
//        public static ClassDescribe GetDescribe<T>()
//        {
//            return ClassDescribe.Get(typeof(T));
//        }

//        /// <summary>
//        /// 创建对象
//        /// </summary>
//        /// <param name="type"></param>
//        /// <returns></returns>
//        public static object CreateInstance(this Type type)
//        {
//            return Activator.CreateInstance(type);
//        }

//        /// <summary>
//        /// 创建对象
//        /// </summary>
//        /// <typeparam name="T"></typeparam>
//        /// <param name="type"></param>
//        /// <returns></returns>
//        public static T CreateInstance<T>(this Type type)
//        {
//            return (T)Activator.CreateInstance(type);
//        }
//    }
//}
